热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker【4】|Docker基本命令,一篇就够。

大家好,我是脚丫先生(o^^o)学了那么多的Docker知识,如果这节还是讲原理方面的知识,那么就过于纸上谈兵了,是时候开

大家好,我是脚丫先生 (o^^o)

学了那么多的Docker知识,如果这节还是讲原理方面的知识,那么就过于纸上谈兵了,是时候开始真正的亮剑。(有参考其他博主的文章)

文章目录

  • Docker常用命令
    • 1. 查看docker容器版本
    • 2、镜像操作
      • 2.1、镜像查看
      • 2.2、镜像搜索
      • 2.3、镜像下载
      • 2.4、镜像删除
        • 2.4.1 docker批量删除容器、镜像
      • 2.5、镜像构建
        • 2.5.1、commit 镜像
        • 2.5.2、dockerfile
      • 2.6 查看镜像的元数据信息
    • 3、容器操作
      • 3.1、容器启动
      • 3.2、容器进程
      • 3.3、容器日志
      • 3.4、容器的进入与退出
      • 3.5、查看容器
      • 3.6、容器的停止与删除
      • 3.7、容器与主机间的数据拷贝
    • 4、docker push到私有仓库
    • 4.1 docker-compose单独更新某个服务




Docker常用命令

Docker的官方文档非常的详细,关于所有的命令行使用说明/规范,可以参考 https://docs.docker.com/reference/
在这里插入图片描述

1. 查看docker容器版本

docker version
查看docker容器信息
docker info
查看docker容器帮助
docker --help

2、镜像操作

提示:对于镜像的操作可使用镜像名、镜像长ID和短ID。

2.1、镜像查看

列出本地images
docker images
含中间映像层
docker images -a

在这里插入图片描述

只显示镜像ID
docker images -q
含中间映像层
docker images -qa

在这里插入图片描述

显示镜像摘要信息(DIGEST列)
docker images --digests
显示镜像完整信息
docker images --no-trunc

在这里插入图片描述

显示指定镜像的历史创建;参数:-H 镜像大小和日期,默认为true;--no-trunc 显示完整的提交记录;-q 仅列出提交记录ID
docker history -H redis

2.2、镜像搜索

搜索仓库MySQL镜像
docker search mysql
##--filter=stars=600:只显示 starts>=600 的镜像
docker search --filter=stars=600 mysql
## --no-trunc 显示镜像完整 DESCRIPTION 描述
docker search --no-trunc mysql
## --automated :只列出 AUTOMATED=OK 的镜像
docker search --automated mysql

在这里插入图片描述

2.3、镜像下载

下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
下载仓库所有Redis镜像
docker pull -a redis
下载私人仓库镜像
docker pull bitnami/redis

在这里插入图片描述

2.4、镜像删除

单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
删除本地全部镜像
docker rmi -f $(docker images -q)

2.4.1 docker批量删除容器、镜像

1、删除所有容器

docker rm `docker ps -a -q`

2、删除所有镜像

docker rmi `docker images -q`

3、按条件删除镜像

没有打标签

发现服务器里都none的镜像

docker images|grep none|awk '{print $3}'|xargs docker rmips:
docker images :镜像列表
|grep none : 筛选含 none 的行
|awk '{print $3}' :awk行处理器打印第三个参数(IMAGE ID)
|xargs : 参数列表转换
docker rmi : 镜像删除命令

镜像名包含关键字

docker rmi --force `docker images | grep doss-api | awk '{print $3}'` //其中doss-api为关键字

2.5、镜像构建


2.5.1、commit 镜像

用户提交对容器的修改,并生成新的镜像。

docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[版本TAG]

2.5.2、dockerfile

1)编写dockerfile
在自己新建的dockers目录下新建dockerfile文件

cd /dockers
vi Dockerfile

2)构建docker镜像
在dockers目录下执行

docker build -t="镜像名:版本号" .

. 符号表示当前目录。

2.6 查看镜像的元数据信息

docker inspect 容器id

[{"Id": "9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220","Created": "2020-11-08T06:03:48.598473909Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 45074,"ExitCode": 0,"Error": "","StartedAt": "2020-11-08T06:03:48.796392054Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566","ResolvConfPath": "/var/lib/docker/containers/9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220/resolv.conf","HostnamePath": "/var/lib/docker/containers/9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220/hostname","HostsPath": "/var/lib/docker/containers/9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220/hosts","LogPath": "/var/lib/docker/containers/9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220/9a1f7b30a10a33a36b7649e8f0992247c7767fccc2d253dfdf7a42b0c4cb1220-json.log","Name": "/jolly_mayer","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"CapAdd": null,"CapDrop": null,"Capabilities": null,"Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","ConsoleSize": [0,0],"Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": null,"BlkioDeviceWriteBps": null,"BlkioDeviceReadIOps": null,"BlkioDeviceWriteIOps": null,"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"KernelMemory": 0,"KernelMemoryTCP": 0,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/e9101448258930021351001b2ad30349f485f11800752a56c174cbf7ca0e0057-init/diff:/var/lib/docker/overlay2/2ffe0b620bf852329f5b2c405efb84cd6bbb1abbd75879276b4bed0e1962effc/diff","MergedDir": "/var/lib/docker/overlay2/e9101448258930021351001b2ad30349f485f11800752a56c174cbf7ca0e0057/merged","UpperDir": "/var/lib/docker/overlay2/e9101448258930021351001b2ad30349f485f11800752a56c174cbf7ca0e0057/diff","WorkDir": "/var/lib/docker/overlay2/e9101448258930021351001b2ad30349f485f11800752a56c174cbf7ca0e0057/work"},"Name": "overlay2"},"Mounts": [],"Config": {"Hostname": "9a1f7b30a10a","Domainname": "","User": "","AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"Tty": true,"OpenStdin": true,"StdinOnce": true,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/bash"],"Image": "centos","Volumes": null,"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20200809","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS"}},"NetworkSettings": {"Bridge": "","SandboxID": "f125e682faaca30a5ff2ea78298b6a63aa4b416de1a4150dc2271de55bb2bec5","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/f125e682faac","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "d49e14b7c195c2bb3d2ccad715cec0410d6b47e81fdec609296ac6ee84a47fb5","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "97d11e1f759394b549127015587527c5590965c6a66d0b1a5314dcf3b2ba626a","EndpointID": "d49e14b7c195c2bb3d2ccad715cec0410d6b47e81fdec609296ac6ee84a47fb5","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null}}}}
]

3、容器操作


3.1、容器启动

新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--name 为容器指定一个名称
docker run -i -t --name mycentos
后台启动容器,参数:-d 已守护方式启动容器
docker run -d mycentos

注意:此时使用"docker ps -a"会发现容器已经退出。这是docker的机制:要使Docker容器后台运行,就必须有一个前台进程。解决方案:将你要运行的程序以前台进程的形式运行。

启动一个或多个已经被停止的容器
docker start redis
重启容器
docker restart redis

3.2、容器进程

##top支持 ps 命令参数,格式:docker top [OPTIONS] CONTAINER [ps OPTIONS]
列出redis容器中运行进程
docker top redis
查看所有运行容器的进程信息
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

3.3、容器日志

查看redis容器日志,默认参数
docker logs rabbitmq
查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
查看容器redis从2019年05月21日后的最新10条日志。
docker logs --since="2019-05-21" --tail=10 redis

3.4、容器的进入与退出

使用run方式在创建时进入
docker run -it centos /bin/bash
关闭容器并退出
exit
仅退出容器,不关闭
快捷键:Ctrl + P + Q
直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
docker exec -i -t centos /bin/bash
以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos touch cache.txt

3.5、查看容器

查看正在运行的容器
docker ps
查看正在运行的容器的ID
docker ps -q
查看正在运行+历史运行过的容器
docker ps -a
显示运行容器总文件大小
docker ps -s
查看容器的IP
docker inspect 容器ID | grep IPAddress
查看容器的环境变量
docker exec centos env

在这里插入图片描述

显示最近创建容器
docker ps -l
显示最近创建的3个容器
docker ps -n 3
不截断输出
docker ps --no-trunc

在这里插入图片描述

3.6、容器的停止与删除

停止一个运行中的容器
docker stop redis
杀掉一个运行中的容器
docker kill redis
删除一个已停止的容器
docker rm redis
删除一个运行中的容器
docker rm -f redis删除所有的容器
docker rm -f $(docker ps -aq)
-l 移除容器间的网络连接,连接名为 db
docker rm -l db
-v 删除容器,并删除容器挂载的数据卷
docker rm -v redis

3.7、容器与主机间的数据拷贝

将redis容器中的文件copy至本地路径
docker cp redis:/[container_path] [local_path]
将主机文件copy至rabbitmq容器
docker cp [local_path] redis:/[container_path]/
将主机文件copy至redis容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] redis:/[container_path]

4、docker push到私有仓库

1、登录
http://xxxxx.com为私有仓库地址

docker login http://xxxxx.com

2、登录私有创建项目

例如项目叫:abc-dev

3、给镜像打tag

docker tag 2e25d8496557 xxxxx.com/abc-dev/arc:1334

2e25d8496557:IMAGE ID,可以用docker images 查看

xxxxx.com:私有hub域名

abc-dev:项目名称

arc:镜像名称

1334:镜像版本号

4、推送

4.1 docker-compose单独更新某个服务

假设有一服务名为AAA(基于镜像AAA)

步骤:

更新镜像
docker build -t AAA

stop容器
docker-compose stop AAA

删除容器
docker-compose rm -f AAA

基于更新后的镜像重新启动容器
docker-compose up -d AAA

docker push xxxxx.com/abc-dev/arc:1334 

📢博客主页:https://blog.csdn.net/shujuelin
📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!


推荐阅读
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • Ubuntu安装常用软件详细步骤
    目录1.GoogleChrome浏览器2.搜狗拼音输入法3.Pycharm4.Clion5.其他软件1.GoogleChrome浏览器通过直接下载安装GoogleChro ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 解决php错误信息不显示在浏览器上的方法
    本文介绍了解决php错误信息不显示在浏览器上的方法。作者发现php中的各种错误信息并不显示在浏览器上,而是需要在日志文件中查看。为了解决这个问题,作者提供了一种解决方式:通过修改php.ini文件中的display_errors参数为On,并重启服务。这样就可以在浏览器上直接显示php错误信息了。 ... [详细]
author-avatar
吉之麟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有